package com.atguigu.yygh.hosp.controller.api;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.atguigu.yygh.common.exception.YyghException;
import com.atguigu.yygh.common.helper.HttpRequestHelper;
import com.atguigu.yygh.common.result.Result;
import com.atguigu.yygh.common.result.ResultCodeEnum;
import com.atguigu.yygh.common.utils.MD5;
import com.atguigu.yygh.hosp.service.DepartmentService;
import com.atguigu.yygh.hosp.service.HospitalSetService;
import com.atguigu.yygh.model.hosp.Department;
import com.atguigu.yygh.vo.hosp.DepartmentQueryVo;

import lombok.extern.slf4j.Slf4j;

/** 
* @author 作者 Your-Name: 
* @version 创建时间：2021年5月17日 下午2:44:53 
* 类说明 
*/
@RestController
@Slf4j
@RequestMapping("/api/hosp")
public class DepartmentController {

	@Autowired
	private DepartmentService departmentService;
	
	@Autowired
	private HospitalSetService hospitalSetService;
	
	//上传可是接口
	@PostMapping("/saveDepartment")
	public Result saveDepartment(HttpServletRequest request){
		//获取到 传递过来的科室信息
		//返回   map 集合
		Map<String, String[]> requestMap = request.getParameterMap();
		Map<String, Object> paramMap = HttpRequestHelper.switchMap(requestMap);
		//类似于 权限校验
		// 1 获取医院系统 传递过来的签名   signKey 已经进行MD5加密
		String hospitalSign = paramMap.get("sign").toString();
				
		// 2 yygh_hosp.yygh_set表中的签名     根据传递过来的医院编号 查询数据库 查询签名
		String hostcode = paramMap.get("hostcode").toString();
		String signKey = hospitalSetService.getSignKey(hostcode);
				
		// 3 把从数据库查询的 signkey 进行md5加密 
		String signKeyMD5 = MD5.encrypt(signKey);
				
		// 4 之后再进行比较  判断签名是否一致
		if( !hospitalSign.equals(signKeyMD5) ){
			// 提示  自定义异常
			throw new YyghException(ResultCodeEnum.SIGN_ERROR);
		}
		
		//调用 DepartmentService中的方法
		departmentService.save(paramMap);
		return Result.ok();
	}
	
	//查询科室接口
	@PostMapping("/department/list")
	public Result findDepartment(HttpServletRequest request){
		//获取到 传递过来的科室信息
		//返回   map 集合
		Map<String, String[]> requestMap = request.getParameterMap();
		Map<String, Object> paramMap = HttpRequestHelper.switchMap(requestMap);
		//获取相关 数据
		// 1 获取医院系统 传递过来的签名   signKey 已经进行MD5加密
		String hospitalSign = paramMap.get("sign").toString();
						
		// 2 yygh_hosp.yygh_set表中的签名     根据传递过来的医院编号 查询数据库 查询签名
		String hostcode = paramMap.get("hostcode").toString();
		String signKey = hospitalSetService.getSignKey(hostcode);
						
		// 3 把从数据库查询的 signkey 进行md5加密 
		String signKeyMD5 = MD5.encrypt(signKey);
						
		// 4 之后再进行比较  判断签名是否一致
		if( !hospitalSign.equals(signKeyMD5) ){
			// 提示  自定义异常
			throw new YyghException(ResultCodeEnum.SIGN_ERROR);
		}
		//当前页
		int page = StringUtils.isEmpty(paramMap.get("page")) ? 1 : Integer.parseInt(paramMap.get("page").toString());
		//每页记录数   每页多少条数据
		int limit = StringUtils.isEmpty(paramMap.get("limit")) ? 1 : Integer.parseInt(paramMap.get("limit").toString());
		
		//封装查询条件
		DepartmentQueryVo departmentQueryVo = new DepartmentQueryVo();
		departmentQueryVo.setHostcode(hostcode);
		//调用 service
	    Page<Department> pageList = departmentService.findDepartmentPage(page, limit, departmentQueryVo);
		return Result.ok(pageList);
	}
	
	//删除科室接口
	@PostMapping("/department/remove")
	public Result removeDepartment(HttpServletRequest request){
		//获取到 传递过来的科室信息
		//返回   map 集合
		Map<String, String[]> requestMap = request.getParameterMap();
		Map<String, Object> paramMap = HttpRequestHelper.switchMap(requestMap);
		//获取相关 数据
		// 1 获取医院系统 传递过来的签名   signKey 已经进行MD5加密
		String hostcode = paramMap.get("hostcode").toString();
		String depcode = paramMap.get("depcode").toString();
								
		// 2 yygh_hosp.yygh_set表中的签名     根据传递过来的医院编号 查询数据库 查询签名
		String hospitalSign = paramMap.get("sign").toString();
		String signKey = hospitalSetService.getSignKey(hostcode);
								
		// 3 把从数据库查询的 signkey 进行md5加密 
		String signKeyMD5 = MD5.encrypt(signKey);
								
		// 4 之后再进行比较  判断签名是否一致
		if( !hospitalSign.equals(signKeyMD5) ){
			// 提示  自定义异常
			throw new YyghException(ResultCodeEnum.SIGN_ERROR);
		}
		departmentService.remove(hostcode, depcode);
		return Result.ok();
	}
	
}
